﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EM.Repository.utility;
using System.Data;
using System.Data.SqlClient;
using System.Web.Security;

namespace EM.user
{
    public partial class forgotpassword : System.Web.UI.Page
    {
        DbHelper dsrv = new DbHelper();
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void btnResetPassword_Click(object sender, EventArgs e)
        {
            lblError.Text = "";
            string message = "";
            bool success = false;

            try
            {
                if (!string.IsNullOrEmpty(txtForgetUserCode.Text))
                {
                    DataTable table = new DataTable();
                    using (var cmd = new SqlCommand())
                    {
                        cmd.CommandText = "SELECT TOP 1 USERID,USEREMAIL,ISNULL(ACTIVEFLG,'N') AS PASSIVEFLG, ENDDATE FROM TBLUSER WHERE USERCODE=@USERCODE";
                        cmd.Parameters.AddWithValue("@USERCODE", txtForgetUserCode.Text.Trim());
                        table = dsrv.GetDataTable(cmd, "user");
                    }
                    if (table != null && table.Rows.Count > 0)
                    {
                        DataRow row = table.Rows[0];
                        if (row["PASSIVEFLG"].ToString() == "N")
                        {
                            if (row["ENDDATE"] == null
                                || string.IsNullOrEmpty(row["ENDDATE"].ToString())
                                || (row["ENDDATE"] != null && !string.IsNullOrEmpty(row["ENDDATE"].ToString()) && Convert.ToDateTime(row["ENDDATE"]) > DateTime.Now))
                            {
                                if (row["USEREMAIL"] != null && !string.IsNullOrEmpty(row["USEREMAIL"].ToString()))
                                {
                                    string userId = row["USERID"].ToString();

                                    // 1- rastgele parola oluşturulur ( 10 haneli a-z A-Z 0-9 .-_@ uyumlu )
                                    string[] wordsh = { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "V", "Y", "Z", "X", "W", "Q" };
                                    string[] wordsr = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
                                    string[] wordss = { "@", "-", ".", "_" };
                                    Random rnd = new Random();
                                    string newPass = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}",
                                        wordsh[rnd.Next(wordsh.Length)],
                                        wordsh[rnd.Next(wordsh.Length)].ToLower(),
                                        wordss[rnd.Next(wordss.Length)],
                                        wordsr[rnd.Next(wordsr.Length)],
                                        wordsh[rnd.Next(wordsh.Length)],
                                        wordsr[rnd.Next(wordsr.Length)],
                                        wordsh[rnd.Next(wordsh.Length)].ToLower(),
                                        wordsr[rnd.Next(wordsr.Length)],
                                        wordss[rnd.Next(wordss.Length)],
                                        wordsh[rnd.Next(wordsh.Length)]
                                        );

                                    // 2- yeni parola kayıt edilir
                                    using (var cmd1 = new SqlCommand())
                                    {
                                        cmd1.CommandText = "UPDATE TBLUSER SET USERPASS=@USERPASS, LASTPASSWORDCHANGEDATE=GETDATE() WHERE USERID=@USERID";
                                        cmd1.Parameters.AddWithValue("@USERPASS", FormsAuthentication.HashPasswordForStoringInConfigFile(newPass, "md5"));
                                        cmd1.Parameters.AddWithValue("@USERID", userId);
                                        dsrv.ExecuteNonQuery(cmd1);
                                    }

                                    // 3- yeni parola email ile gönderilir

                                    Notice myNotice = new Notice();
                                    try
                                    {
                                        myNotice.SendUsingTemplate(Notice.TemplateTypes.ForgotPasswordNotification, Convert.ToInt32(userId), newPass);

                                        message = "Yeni şifreniz e-mail adresinize gönderilmiştir.";
                                        success = true;
                                    }
                                    catch
                                    {

                                        message = "Yeni şifreniz e-mail adresinize gönderilirken bir hata oluştu. Lütfen sistem yetkilisi ile görüşünüz.";
                                    }

                                }
                                else
                                {
                                    // email yok
                                    message = "Kullanıcının email adresi tanımlı değildir. Lütfen sistem yetkilisi ile görüşünüz.";
                                }
                            }
                            else
                            {
                                // Kullanıcının bitiş tarihi geçmiş
                                message = "Kullanıcının aktif kullanım süresi dolmuştur. Lütfen sistem yetkilisi ile görüşünüz.";
                            }
                        }
                        else
                        {
                            // Blokeli
                            message = "Şifreniz daha önce iptal edilmiştir. Lütfen sistem yetkilisi ile görüşünüz.";
                        }
                    }
                    else
                    {
                        // hatalı kullanıcı kodu
                        message = "Kullanıcı kodu hatalı.";
                    }
                }
                else
                {
                    // Kullanıcı kodu boş
                    message = "Kullanıcı kodu boş bırakılamaz.";
                }
            }
            catch
            {
                message = "Hata oluştu. Daha sonra tekrar deneyiniz.";
            }

            if (success)
                this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "alert('" + message + "'); window.close(); ", true);

            lblError.Text = message;

        }
    }
}